<?php
require_once('Qname.class.php');
/**
 * URI
 *
 * @package converters
 * @author Keith Alexander
 **/
class URI extends ConvertableObject
{
	
	/**
	 * to_eRDF_term
	 *
	 * @param string $uri
	 * @param array $namespaces
	 * @return string
	 * @author Keith Alexander
	 **/
	public function to_eRDF_term($uri,$namespaces=false)
	{
		if($qname=URI::to_qname($uri,$namespaces)) return $qname->to_eRDF_term();
		else return false;

	}
	
	/**
	 * split
	 *
	 * @return array - 0 = base uri; 1 = term id.
	 * @param string $term_uri
	 * @author Keith Alexander
	 **/
	public function split($term_uri)
	{
		preg_match('@^(.+?[/#])([^/#]+)$@',$term_uri, $p_match);
		array_shift($p_match);
		return  $p_match;	 
	}
	
	/**
	 * to_namespace
	 * @param string $uri
	 * @return string
	 * @author Keith Alexander
	 **/
	public function to_namespace($uri)
	{
		return array_shift(URI::split($uri));
	}
	
	/**
	 * to_term
	 * @param string $uri
	 * @return string
	 * @author Keith Alexander
	 **/
	public function to_term($uri)
	{
	  	$term =  array_pop(URI::split($uri));
		
		return $term;
	}
	
	public function to_label($uri)
	{
		$term = URI::to_term($uri);
		return ucwords(preg_replace('/([a-z])([A-Z])/','$1 $2', str_replace('_',' ',$term)));
	}
	
	/**
	 * to_qname
	 * @param string $uri
	 * @param array | bool $namespaces
	 * @param string $separator
	 * @return object
	 * @author Keith Alexander
	 **/
	public function to_qname($uri, $namespaces=false, $separator=':')
	{
		if(!$namespaces) $namespaces = $this->namespaces();
		$inverted_namespaces = array_flip($namespaces);
		$ns=count($namespaces);$ns++;
		if(!$uri) $uri = $this->value();
		if(!$uri) return false;
		$p_parts =  URI::split($uri);
		if(empty($p_parts)) return new Qname();
		$prefix = (isset($inverted_namespaces[$p_parts[0]]))? $inverted_namespaces[$p_parts[0]] : 'ns'.$ns;
	
		if(!isset($inverted_namespaces[$p_parts[0]]))
		{
			$namespaces[$prefix] = $p_parts[0];
			$inverted_namespaces[$p_parts[0]] = $prefix;
		}
	
		 $qname_val = $prefix.$separator.$p_parts[1];		
		 $qname = new Qname();
		$qname->separator = $separator;
		 $qname->set_value($qname_val);
		$this->set_namespaces($namespaces);
		 return $qname;
	}
}

?>